package com.sky.mapper;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.sky.annotation.AutoFill;
import com.sky.enumeration.OperationType;
import com.sky.dto.CategoryPageQueryDTO;
import com.sky.entity.Category;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

@Mapper
public interface CategoryMapper extends BaseMapper<Category> {


    /**
     * 分页查询
     * 使用LambdaQueryWrapper构建动态查询条件
     */
    default Page<Category> pageQuery(CategoryPageQueryDTO categoryPageQueryDTO) {
        // 使用 PageHelper 启动分页
        PageHelper.startPage(categoryPageQueryDTO.getPage(), categoryPageQueryDTO.getPageSize());

        // 构建查询条件
        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        if (categoryPageQueryDTO.getName() != null && !categoryPageQueryDTO.getName().isEmpty()) {
            queryWrapper.like(Category::getName, categoryPageQueryDTO.getName());
        }
        if (categoryPageQueryDTO.getType() != null) {
            queryWrapper.eq(Category::getType, categoryPageQueryDTO.getType());
        }
        queryWrapper.orderByAsc(Category::getSort)
                .orderByDesc(Category::getCreateTime);

        // 执行查询（PageHelper 会自动拦截并分页）
        List<Category> list = this.selectList(queryWrapper);

        // 将结果转换为 PageHelper 的 Page 对象
        return (Page<Category>) list;
    }

    /**
     * 根据id删除分类
     * 可以直接使用BaseMapper提供的deleteById方法
     * 这里保留原注解方式作为示例
     */
    @Delete("delete from category where id = #{id}")
    void deleteById(Long id);

    /**
     * 根据id修改分类
     * 使用MyBatis-Plus的更新方法结合Wrapper实现动态更新
     */
    @AutoFill(value = OperationType.UPDATE)
    default void update(Category category) {
        LambdaQueryWrapper<Category> updateWrapper = new LambdaQueryWrapper<>();
        updateWrapper.eq(Category::getId, category.getId());

        // MyBatis-Plus的update方法会自动忽略null值字段，实现动态更新
        update(category, updateWrapper);
    }

    /**
     * 根据类型查询分类
     */
    default List<Category> list(Integer type) {
        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        // 状态为1
        queryWrapper.eq(Category::getStatus, 1);
        // 类型条件（如果不为null）
        if (type != null) {
            queryWrapper.eq(Category::getType, type);
        }
        // 排序条件
        queryWrapper.orderByAsc(Category::getSort)
                .orderByDesc(Category::getCreateTime);

        return selectList(queryWrapper);
    }
}
